var context = 'VirtualTutor1.5';

//function display(tableIndex, courseId) {
//    vtutoribm(tableIndex, courseId);
//}

function vtutoribm(tableIndex, courseId) {
    document.write('<input type="button" value="Использовать модуль Виртуальный тьютор IBM" onclick="show(event, '+tableIndex+', '+courseId+'); enrichTable('+tableIndex+', '+courseId+');">');
}

function show(event, tableIndex, courseId) {
    var trg = event.target || event.srcElement;
    var parent = $(trg).parent();

    parent.append('<br/>');

    parent.append('<div style="margin: 10px">\n\
<fieldset>\n\
<legend>Виртуальный тьютор IBM</legend>\n\
<div style="width: 28%; float: left; padding: 2px;">\n\
<input type="button" value="Запустить проверку" title="Запуск процесса автоматизированной проверки" style="cursor: pointer; width: 95%;" onclick="initiateCheck('+tableIndex+', '+courseId+')"/>\n\
<br/>\n\
<input type="button" value="Обновить данные" title="Обновить данные в таблице" style="cursor: pointer; width: 95%;" onclick="enrichTable('+tableIndex+', '+courseId+', true)"/>\n\
<br/>\n\
<input type="button" value="Синхронизация" title="Открыть окно синхронизации данных" style="cursor: pointer; width: 95%;" onclick="showSync('+courseId+');"/>\n\
</div>\n\
<div style="width: 70%; float: right; padding: 2px;">\n\
<textarea id="vtutoribmConsole_'+tableIndex+'" style="width: 100%; height: 80px;" readonly="readonly"></textarea>\n\
</div>\n\
</fieldset>\n\
</div>');

    $(trg).remove();
}

var iter = 0;
function initiateCheck (tableIndex, courseId) {
    //    console(tableIndex, 'Выполняется проверка курса. Пожалуйста, подождите.\n');
    console(tableIndex, 'Проверка курса... ');
    consoleWait(tableIndex);
    
    $.ajax({
        url: './../'+context+'/CheckServlet',
        data: "courseId="+courseId
        ,
        success: function(response) {
            //            console(tableIndex, 'Проверка выполнена '+(msg!=null&&msg!=''?' за '+msg+' секунд':'')+'.\n');
            var time = null;
            var msg = null;
            if(response != null) {
                if(response.indexOf("msg") != -1) {
                    msg = response.split('msg:')[1];
                    time = response.split('msg:')[0];
                } else {
                    time = response;
                }
            }
            console(tableIndex, (time!=null?'затрачено '+time+' с':'')+'.\n', false);
            if(msg != null) {
                console(tableIndex, msg, false);
            }
            enrichTable(tableIndex, courseId, true);
            consoleOk(tableIndex);
        }
        ,
        error: function() {
            console(tableIndex, ' Произошла ошибка проверки курса. Возможно, данные не синхронизированы. Пожалуйста, обратитесь к администратору.\n', false);
            consoleOk(tableIndex);
        }
    });


}

function enrichTable(tabIndex, courseId, renew) {
    console(tabIndex, 'Обновление таблицы... ');
    consoleWait(tabIndex);

    try {
        $.ajax({
            url: './../'+context+'/EnrichTable',
            //            data: "labId="+labId+"&studentId="+studentId,
            data: "courseId="+courseId,
            success: function(JSONtext) {
                var json = eval('(' + JSONtext + ')');
            
                var students = json.students;
                for(var i = 0; i < students.length; i++) {
                    var student = students[i];
                    var studentId = student.studentId;
                    var studentLabs = student.studentLabs;

                    for(var j = 0; j < studentLabs.length; j++) {
                        var lab = studentLabs[j];
                        var labNumber = lab.labNumber;
                        var percent = lab.percent;

                        var key = studentId+':'+labNumber;


                        var toInsert;
                        switch(percent) {
                            case -1:
                                //                                toInsert = '<span title="Нет объектов проверки" style="width: 100%;">Не проверяется</span>';
                                toInsert = '<span title="Нет объектов проверки">Нет объектов</span>';
                                break;
                            case -2:
                                // ?
                                toInsert = 'Нет данных'; // ?
                                break;
                            default:
                                toInsert =
                                '<b style="cursor: help;" title=\"Детали проверки\" onclick="window.open(\'../'+context+'/WorkDetails?studentId='+studentId+'&courseId='+courseId+'&labNumber='+labNumber+'\', \'Детали проверки\', \'status=0, location=no, resizable=yes, scrollbars=yes, width=750, height=600\')">'
                                + percent + '%</b>';
                                toInsert += '';


                        }

                        /*
                    $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+'] > span.result')
                        .text(percent != -1 ? (percent+'%') : 'Не проверяется');
                         */
                        if(renew) {
                            try {
                                var oldText = $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+'] > span.result').text();

                                //        var exp = /^[1-9,0]+/;
                                //        if(!exp.test(number)) {
                                //            alert("В поле \"Номер\" должны быть цифры");
                                //            return;
                                //        }

                                if(oldText.indexOf('В процессе') == -1
                                    && oldText.indexOf('Выполнено') == -1
                                    && oldText.indexOf('Нет объектов') == -1
                                    && toInsert.indexOf('Нет объектов') == -1
                                    ) {
                                    oldText = oldText.substring(0, oldText.length-1)
                                    if(oldText != percent) {
                                        if(oldText < percent) {
                                            $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+']').css('background', 'url("./../'+context+'/img/icons/chart_up.png") left center no-repeat');
                                        } else {
                                            $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+']').css('background', 'url("./../'+context+'/img/icons/chart_down.png") left center no-repeat');
                                        }
                                        $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+']').attr('title', 'Результат предыдущей проверки: '+oldText+'%')
                                    } else {
                                        $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+']').css('background', '');
                                        $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+']').attr('title', '')
                                    }
                                }

                            } catch(e){}
                        }
                        $('table#labsTable_'+tabIndex+' > tbody > tr > td[key='+key+'] > span.result')
                        .html(toInsert);
                    }
                }


                console(tabIndex, 'готово.\n', false);

                if(!renew) {
                    checkSync(tabIndex, courseId);
                }

                consoleOk(tabIndex);
            },
            error: function() {
                console(tabIndex, 'Произошла ошибка запроса данных. Пожалуйста, сообщите администратору.\n');
                consoleOk(tabIndex);
            }
        });
    } catch (e) {
        console(tabIndex, 'Произошла ошибка запроса данных. Пожалуйста, обратитесь к администратору.\n')
        consoleOk(tabIndex);
    }


    // task buttons
    $('table#labsTable_'+tabIndex+' > thead > tr > th.labHeader').each(function(){
        var labId = $(this).attr('id');

        //$(this + ' > input[name=task]').val(labId);
        //var inp = $('table#labsTable_'+tabIndex+' > thead > tr > th.labHeader#'+labId + ' > input[name=task]');

        try {
            // $('task'+labId).attr('onclick', '');
            if(!$.browser.msie) {
                document.getElementById('task'+labId).onclick = undefined;
            }else {
                document.getElementById('task'+labId).onclick = function() {};
            }
        }catch (e) {
        }

        var inp = $('table#labsTable_'+tabIndex+' > thead > tr > th.labHeader#'+labId + ' > input[name=task]');
        inp.attr('title', 'Настройка проверки практической работы')
        var labNumber = $(this).attr('key');
        inp.click(function() {

            //if(jQuery.browser != 'msie') {
            if(!$.browser.msie) {
                // window.open('./../VirtualTutor1.5/LabTask?labId='+labId, 'Описание практической работы', 'status=0, location=no, resizable=yes, scrollbars=yes, width=750, height=550');
                window.open('./../'+context+'/LabTask?courseId='+courseId+'&labNumber='+labNumber, 'Описание практической работы', 'status=0, location=no, resizable=yes, scrollbars=yes, width=750, height=550');
            } else {
                //window.open('./../VirtualTutor1.5/LabTask?labId='+labId);
                window.open('./../'+context+'/LabTask?courseId='+courseId+'&labNumber='+labNumber);
                
            }
        });
    });
}

function showSync(courseId) {
    if(!$.browser.msie) {
        window.open('./../'+context+'/DataSync?courseId='+courseId, 'Синхронизация данных модуля "Виртуального тьютора" и Виртуальной лаборатории', 'status=0, location=no, resizable=yes, scrollbars=yes, width=750, height=550');
    } else {
        window.open('./../'+context+'/DataSync?courseId='+courseId);
    }
}

function checkSync(tabIndex, courseId) {
    console(tabIndex, 'Проверка актуальности данных... ');
    consoleWait(tabIndex);

    try {
        $.ajax({
            url : './../'+context+'/DataSync?courseId='+courseId+'&enrichSync',
            success: function(code) {
                if(code == 0) {
                    console(tabIndex, 'проверено.\n', false);
                    consoleOk(tabIndex);
                } else {
                    if(code == 1) {
                        console(tabIndex, 'количество практических работ в модуле "Виртуальный тьютор" и в системе различно. Возможно, требуется синхронизация.\n', false);
                        consoleOk(tabIndex);
                    } else {
                        console(tabIndex, 'неизвестный код: '+code+'.\n', false);
                        consoleOk(tabIndex);
                    }
                }
            }
        });
    } catch(e) {
        console(tabIndex, '\nПроизошла ошибка проверки актуальности данных.');
        consoleOk(tabIndex);
    }
}

function console(tabIndex, text, showtime) {

    try {
        var console = $('textarea#vtutoribmConsole_'+tabIndex);
        if(showtime == undefined || showtime == true) {
            var date = new Date();
            console.append(date.getHours()+':'+date.getMinutes()+':'+date.getSeconds()+' ');
        }
        console.append(text);
        console.attr('scrollTop', console.attr('scrollHeight'));
    // textArea.scrollTop = textArea.scrollHeight;

    //animate({ scrollTop: $t.height() }, 1000);
    } catch(e){}
}

function consoleWait(tableIndex) {
    try {
        $('textarea#vtutoribmConsole_'+tableIndex).css('cursor', 'progress');
    //        $('textarea#vtutoribmConsole_'+tableIndex).parent().css('background', 'url(\'./../'+context+'/images/loading.gif\') no-repeat scroll right top ');
    // background: url(\'./../'+context+'/images/loading.gif\') no-repeat scroll left center transparent;
    } catch(e){}
}

function consoleOk(tableIndex) {
    try {
        $('textarea#vtutoribmConsole_'+tableIndex).css('cursor', 'default');
    //        $('textarea#vtutoribmConsole_'+tableIndex).css('background', '');
    } catch(e){}
}